//////////////////////////////////////////////////////////////////////////
// q3dModel - surface in Quebra3D
// By Antonio Miranda - June 2014
//////////////////////////////////////////////////////////////////////////

#ifndef _Q3D_MODEL_H
#define _Q3D_MODEL_H

#include "topology/tetratopology.h"
#include "auxiliary/boundaryFrom3DMesh.h"

using namespace std;

class q3dSegment;
class q3dVertex;
class q3dSurface;
class decompBoundary;

// class q3dSegment
//////////////////////////////////////////////////////////////////////////
class q3dModel
{
public:
  q3dModel( );
  ~q3dModel (void);

  // set 3D mesh and create all structures if necessary
  bool set3DMesh (tetraTopology *mesh3D, bool build_structure = false);

  // easy accesses
  //////////////////////////////////////////////////////////////////////////
  
  // 3d mesh with a topology structure
  tetraTopology *m_mesh3d;

  // boundary of 3d Mesh
  boundaryFrom3DMesh m_boun3D;

  vector <q3dVertex  *> m_vertex;
  vector <q3dSegment *> m_segment;
  vector <q3dSurface *> m_surface;

private:
 
  // create entities
  void createEntFromMesh3D ( );

  void createAdjPointers (decompBoundary *decomp);
    

};

#endif
